[Ver 2023.1 新機能] DCM の外部保管庫として AWS Secrets Manager が利用可能になりました
2023/5/17 に Alteryx Designer の Version 2023.1 がリリースされました。
Designer 2023.1リリースノート | Alteryx Documentation
新機能として、DCM(データ接続マネージャー)の外部保管庫として、AWS Secrets Manager が利用できるようになり、試してみましたので、本記事で内容をまとめます。
DCM とは
DCM(データ接続マネージャー)は、各種データベース等のデータソースへの接続情報(ホスト・データベース名・ユーザー名・パスワード等)を管理するための機能です。
DCM を使用することで、ワークフローの各ツール(データ入力ツールなど)に接続情報を直接入力せずに、事前に DCM で設定した接続情報を呼び出すことが可能となります。
また、バージョン 2023.1 からこの DCM はシステム設定の DCM モードにおいて既定として設定されています。これにより、例えば データ入力ツール をワークフローに配置すると、下図赤枠部分の「データ接続マネージャー(DCM)の使用」にチェッが入り、有効となっています。
通常のファイルを選択する場合、DCM モードでは使用できないので、自動的にこのチェックが外れることになります。
検証環境
下記の環境で検証しています。
- Windows 10 Pro
- Alteryx Designer 2023.1
- Ubuntu 22.04.1 LTS on Windows
- PostgreSQL 14.7
- ローカル環境に構成
検証用データベース
検証用のデータソースとして、PostgreSQL を使用しました。ローカルに構成し、サンプル用のデータベース、読み取り専用ユーザーを作成済みとしています。
AWS 側の設定
AWS Secrets Manager の設定
下記の設定で値を登録しました。
- シークレットのタイプ
- その他のデータベースの資格情報
- シークレットの名前
alteryx/postgres/local
- 暗号化キー
- デフォルト(
aws/secretsmanager
)
- デフォルト(
- シークレットの値
- 後ほど、この KEY 値を使用してユーザー名やパスワードを指定することになります
Key | Value |
---|---|
username | read_user |
password | パスワード |
engine | postgres |
host | localhost |
port | 5432 |
dbname | userdb |
Secrets Manager のアクセス制御
Secrets Manager へのアクセス制御の方法として、アイデンティティベースのアクセス制御を使用することとします。アクセス制御の方法については、下記もあわせてご参照ください。
AWS Secrets ManagerでEC2キーペア秘密鍵の安全な受け渡しを管理してみる | DevelopersIO
ここでは、アクセスに必要なユーザーやポリシーを下記の通り設定しました。
- 作業用 IAM ユーザーの作成
- Alteryx から Secret Manager への接続時は、アクセスキー(アクセスキーID・シークレットキー)が必要となります
- 本記事では、シークレット取得用ユーザーを作成し、アクセスキーを発行しておきます
- 作業用 IAM ユーザーグループの作成
- 作成した IAM ユーザーに付与する権限は、グループにロールをアタッチすることで与えることとします
- I AM ロールの作成
- Secrets Manager からシークレットを取得するためには下記のアクションに対する許可が必要です
secretsmanager:GetSecretValue
- 参考:AWS Secrets Manager のシークレットのためのポリシー例 | AWS
- ここでは以下のポリシーを作成し、IAM ロールに関連付け、グループにアタッチしました
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:ap-northeast-1:XXX:secret:alteryx/postgres/*" } ] }
- Secrets Manager からシークレットを取得するためには下記のアクションに対する許可が必要です
Alteryx 側の設定
設定の手順は、下記に記載があります。
AWS Secrets Manager Configuration | Alteryx Documentation
外部保管庫の作成
メニューから「ファイル > 接続を管理」を選択し「接続マネージャー」を開きます。
画面左下の「外部保管庫」を選択します。
右上の「新規」を選択します。
外部保管庫として使用可能なリストが表示されるので「AWS Secrets Manager」を選択します。
作成するデータソースの名称と Secrets Manager のリージョンと合致するエンドポイントを入力し「保存」を押下します。
※下記は東京リージョンの例。
AWS Secrets Manager のエンドポイント | AWS
「保存」を選択すると下記のように表示されます。
外部保管庫用の資格情報の設定
続いて上図の「資格情報の設定」を選択します。
すると下図のように、外部保管庫(Secrets Manager)への接続に使用する資格情報を入力する画面が開きます。認証方法には「AWS IAM アクセスキー」が選択されており、変更はできません。
資格情報として既存のものがあればそれを選択し、新規作成の場合は「新しい資格情報の作成」を選択し、その名称とアクセスキー(アクセスキーID・シークレットキー)を入力します。
この時点で「接続テスト」を実施できます。アクセスキーが間違っている場合は、テスト接続に失敗します。
問題なく接続できたら「作成/リンク」を押下することで、この外部保管庫に対する資格情報を紐づけできたことになります。
外部保管庫を使用するデータソースへの資格情報の作成
これまでの作業で、外部保管庫(Secrets Manager)に接続できるようになりました。次に、Secrets Manager を使用したデータソースへの資格情報を作成します。
Alteryx で「接続マネージャー」を開き「資格情報」を選択します。
新たに作成するので、画面右上の「+ 新規」を選択します。
すると資格情報の設定画面が開くので、データソースに対する資格情報(本記事の場合、PostgreSQL)としての名称を設定します。
「保管庫」では、ドロップダウンリストより先程作成した「外部保管庫」が選択できます。Secrets Manager の場合、「(保管庫名)- (保管庫に対する資格情報)」の名称で設定画面に表示されます。
その他の設定は、下記の通りです。
※ここでは、「postgres-local-readonly」の名称で作成しています。
- ボールトパス
- Secrets Manager で設定した「シークレットの名前」を入力します
- ここでは
alteryx/postgres/local
となります - Secrets Manager の Arn も指定可能です
- メソッド
- データソースに対する認証方法を指定します
- 本記事での PostgreSQL への認証には、ユーザー名とパスワードを使用するので「ユーザー名とパスワード」を選択します。
- ユーザー名、パスワード
- こちらは使用する資格情報について、Secrets Manager からどのように値を抽出するか指定します
- Secrets Manager では、シークレットの値を、そのキー値を指定することで取り出せるので、それぞれに該当するキー値を入力します
すべて設定できたら「保存」を選択します。すると「接続マネージャー」の「資格情報」にて作成したデータソースへの資格情報が確認できるようになります。
保管庫の値が、先の手順で作成した外部保管庫(Secrets Manager)となっています。
データソースの作成
次に接続先データソースに関する情報を DCM 上で作成します。
接続マネージャーの下図赤枠の「データソース」を選択します。
データソースとして使用するテクノロジーを選択する画面が開くので任意のデータソースを選択します。ここでは、PostgreSQL を選択します。
PostgreSQL の場合、下記のように、使用するドライバー、データベース名やSSL オプションを指定します。指定ができたら右上の「保存」を押下します。
データソース作成すると、「データソース」の一覧に追加されます。作成されたデータソースを選択すると下図のような表示となります。
さいごに、このデータソースと使用する資格情報を紐づけます。「資格情報の接続」を選択します。
接続に使用する資格情報を選択できるメニューが開くので、「外部保管庫を使用するデータソースへの資格情報の作成」で作成した資格情報(ここでは「postgres-local-readonly」)を選択し、「リンク」を押下します。ここで接続テストを実施することも可能です。
以上で、データソース(PostgreSQL)の定義とデータソースに対する資格情報の紐づけが完了しました。
ワークフローで資格情報を呼び出す
ワークフローに データ入力ツール を配置します。
「データ接続マネージャー(DCM)使用」にチェックが入っている状態で「接続を設定します」を押下します。
データ接続のメニューが開くので「データソース」タブを選択します。
データソースから PostgreSQL の 「クイック接続」を押下します。
すると接続マネージャーが開くので、対象のデータソースを選択します。(ここでは、postgres-local)
データソースのメニューでは、使用する資格情報(どのユーザーで接続するか)を選択します。
データソースにリンクされた資格情報から使用するものの「接続」を押下します。
すると、接続マネージャーが閉じ、ワークフロー上で使用するテーブルを選択するメニューが開きます。以降は、これまでと同様の操作となります。
Secrets Manager のシークレットを取得する権限がない場合
シークレットを取得する際は、IAM ユーザーのアクセスキーを使用します。そのため、対象のシークレットを取得(secretsmanager:GetSecretValue
)可能なポリシー持つ IAM ロールを作成し、ユーザーグループにアタッチしています。ポリシーでこの権限が適切に設定されていない場合、下図のように、ボールト(保管庫)に接続できないというエラーメッセージが表示されます。
この場合、シークレット取得に必要なポリシーが付与されているかご確認ください。
さいごに
DCM の外部保管庫として、AWS Secrets Manager を試してみました。
暗号化や鍵のローテーションといったシークレットの管理を AWS上で行え、Alteryx からはその情報を呼び出すのみとなるので、AWS 上ですでにシークレットを管理している場合や、より安全にシークレットを管理したい場合に使える機能と思います。
今回は以上になります。